package com.example.smartagrisys.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.smartagrisys.dto.LandDTO;
import com.example.smartagrisys.dto.LandQueryDTO;
import com.example.smartagrisys.entity.Land;
import com.example.smartagrisys.vo.LandVO;

/**
 * 土地服务接口
 */
public interface LandService extends IService<Land> {

    /**
     * 添加土地
     * @param landDTO 土地信息
     * @param farmerId 农户ID
     * @return 土地ID
     */
    Long add(LandDTO landDTO, Long farmerId);

    /**
     * 更新土地信息
     * @param landDTO 土地信息
     * @param farmerId 农户ID
     * @return 是否成功
     */
    boolean update(LandDTO landDTO, Long farmerId);

    /**
     * 删除土地
     * @param id 土地ID
     * @param farmerId 农户ID
     * @return 是否成功
     */
    boolean delete(Long id, Long farmerId);

    /**
     * 获取土地详情
     * @param id 土地ID
     * @return 土地详情
     */
    LandVO getDetail(Long id);

    /**
     * 分页查询土地
     * @param queryDTO 查询参数
     * @return 分页结果
     */
    Page<LandVO> page(LandQueryDTO queryDTO);

    /**
     * 更新土地状态
     * @param id 土地ID
     * @param status 土地状态
     * @param farmerId 农户ID
     * @return 是否成功
     */
    boolean updateStatus(Long id, Integer status, Long farmerId);

    /**
     * 获取农户的土地列表
     * @param farmerId 农户ID
     * @return 土地列表
     */
    Page<LandVO> getFarmerLands(Long farmerId, Integer pageNum, Integer pageSize);
    
    /**
     * 获取土地类型名称
     * @param type 土地类型
     * @return 类型名称
     */
    String getLandTypeName(Integer type);
    
    /**
     * 获取土壤类型名称
     * @param soilType 土壤类型
     * @return 类型名称
     */
    String getSoilTypeName(Integer soilType);
    
    /**
     * 获取土地状态名称
     * @param status 土地状态
     * @return 状态名称
     */
    String getLandStatusName(Integer status);
    
    /**
     * 获取肥力等级名称
     * @param fertility 肥力等级
     * @return 等级名称
     */
    String getFertilityName(Integer fertility);
    
    /**
     * 获取灌溉条件名称
     * @param irrigation 灌溉条件
     * @return 条件名称
     */
    String getIrrigationName(Integer irrigation);
} 